home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
fb386
/
lib
/
vil310
/
vil
/
vil_bas.bas
< prev
next >
Wrap
BASIC Source File
|
1995-02-20
|
24KB
|
623 lines
10000 *VIL_BAS_VER
10005 VIL_VER%=310
10010 RETURN
10015 *VIL_ENV_INITM
10020 IF VIL_E%=0 THEN
10025 VIL_ENV_ENV$="APPLI.ENV"
10030 VIL_ENV_ORG$="APPLI.ORG"
10035 VIL_W0%=SEARCH(VIL_ENVNAM$,"APPLIENV"):IF VIL_W0%>-1 THEN VIL_ENV_ENV$=VIL_ENVVAL$(VIL_W0%)
10040 VIL_W0%=SEARCH(VIL_ENVNAM$,"APPLIORG"):IF VIL_W0%>-1 THEN VIL_ENV_ORG$=VIL_ENVVAL$(VIL_W0%)
10045 ENDIF
10050 RETURN
10055 *VIL_ENV_ROP
10060 VIL_E%=0:OPEN"I",#1,VIL_ENV_ENV$
10065 IF VIL_E%THEN VIL_E%=0:OPEN"I",#1,VIL_ENV_ORG$
10070 RETURN
10075 *VIL_ENV_RCL
10080 CLOSE#1:RETURN
10085 *VIL_ENV_WOP
10090 VIL_E%=0:OPEN"O",#1,VIL_ENV_ENV$
10095 IF VIL_E%=64 THEN KILL VIL_ENV_ENV$:VIL_E%=0:OPEN"O",#1,VIL_ENV_ENV$
10100 RETURN
10105 *VIL_ENV_WCL
10110 CLOSE#1:RETURN
10115 *VIL_ENV_ERR
10120 CLS
10125 PRINT"環境ファイルにエラーがあります"
10130 PRINT"エラー行:";VIL_W0$
10135 STOP
10140 RETURN
10145 *VIL_BEEP_INITM
10150 IF VIL_E%=0 THEN
10155 VIL_BEEP_F%=-1
10160 ENDIF
10165 RETURN
10170 *VIL_BEEP_ENVR
10175 VIL_W0$="":WHILE VIL_W0$<>"#BEEP":GOSUB*VIL_LNR:WEND
10180 GOSUB*VIL_LNR:VIL_BEEP_F%=VAL(VIL_W0$)
10185 RETURN
10190 *VIL_BEEP_ENVW
10195 PRINT#1,"#BEEP"
10200 PRINT#1,VIL_BEEP_F%
10205 RETURN
10210 *VIL_BEEP_G
10215 IF VIL_BEEP_F%THEN FOR VIL_I%=1 TO 4:BEEP 363523,5,400:WAIT 5:NEXT
10220 RETURN
10225 *VIL_BEEP_B
10230 IF VIL_BEEP_F%THEN BEEP 363523,40,80:WAIT 40
10235 RETURN
10240 *VIL_WIN_INITM
10245 IF VIL_E%=0 THEN
10250 VIL_WIN_X%=0:VIL_WIN_Y%=0:VIL_WIN_W%=0:VIL_WIN_Z%=0
10255 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
10260 VIL_WIN_AN%=0:VIL_WIN_PM%=0
10265 VIL_WIN_BFMAX&=VIL_W0&:VIL_WIN_ANMAX%=VIL_W1%
10270 DIM VIL_WIN_BF%(VIL_W0&),VIL_WIN_BFO&(VIL_W1%)
10275 DIM VIL_WIN_X%(VIL_W1%),VIL_WIN_Y%(VIL_W1%),VIL_WIN_W%(VIL_W1%),VIL_WIN_Z%(VIL_W1%)
10280 VIL_WIN_X%(0)=0:VIL_WIN_Y%(0)=0:VIL_WIN_W%(0)=639:VIL_WIN_Z%(0)=479
10285 ENDIF
10290 RETURN
10295 *VIL_WIN_ENVR
10300 VIL_W0$="":WHILE VIL_W0$<>"#WIN":GOSUB*VIL_LNR:WEND
10305 RETURN
10310 *VIL_WIN_ENVW
10315 PRINT#1,"#WIN"
10320 RETURN
10325 *VIL_WIN_OP
10330 VIL_WIN_AN%=VIL_WIN_AN%+1
10335 VIL_WIN_X%(VIL_WIN_AN%)=VIL_WIN_X%:VIL_WIN_Y%(VIL_WIN_AN%)=VIL_WIN_Y%
10340 VIL_WIN_W%(VIL_WIN_AN%)=VIL_WIN_W%:VIL_WIN_Z%(VIL_WIN_AN%)=VIL_WIN_Z%
10345 VIL_WIN_BFO&(VIL_WIN_AN%)=VIL_WIN_BFO&(VIL_WIN_AN%-1)+INT((INT((VIL_WIN_W%-VIL_WIN_X%+VIL_WIN_LB%+VIL_WIN_RB%+8)/8)*(VIL_WIN_Z%-VIL_WIN_Y%+VIL_WIN_UB%+VIL_WIN_DB%+1)*4+1)/2)
10350 VIL_E%=0
10355 GET@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)-(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)
10360 IF VIL_E%THEN
10365 VIL_WIN_AN%=VIL_WIN_AN%-1
10370 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
10375 VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
10380 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
10385 VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
10390 ENDIF
10395 RETURN
10400 *VIL_WIN_CL
10405 PUT@A(VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%,VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%)-(VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%,VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%),VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)
10410 VIL_WIN_AN%=VIL_WIN_AN%-1
10415 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
10420 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
10425 RETURN
10430 *VIL_WIN_CLDMY
10435 VIL_WIN_AN%=VIL_WIN_AN%-1
10440 VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
10445 VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
10450 RETURN
10455 *VIL_WIN_CLALL
10460 WHILE VIL_WIN_AN%
10465 GOSUB*VIL_WIN_CL
10470 WEND
10475 RETURN
10480 *VIL_WIN_PMR
10485 VIL_WIN_PM%=-1
10490 VIEW(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%)
10495 WINDOW(0,0)-(VIL_WIN_W%-VIL_WIN_X%,VIL_WIN_Z%-VIL_WIN_Y%)
10500 RETURN
10505 *VIL_WIN_PMA
10510 VIL_WIN_PM%=0
10515 VIEW(0,0)-(639,479):WINDOW(0,0)-(639,479)
10520 RETURN
10525 *VIL_VKEY_INITM
10530 IF VIL_E%=0 THEN
10535 VIL_VKEY_KY%=0:VIL_VKEY_PRM%=0:VIL_VKEY_TC$="":VIL_VKEY_TCB$=""
10540 DIM VIL_VKEY_KB%(255),VIL_VKEY_PAD%(107)
10545 VIL_W0$="":WHILE VIL_W0$<>"#VKEY":GOSUB*VIL_LNR:WEND
10550 FOR VIL_I%=0 TO 240 STEP 16
10555 GOSUB*VIL_LNR
10560 FOR VIL_J%=0 TO 15
10565 VIL_VKEY_KB%(VIL_I%+VIL_J%)=VAL(VIL_W0$)
10570 VIL_W0%=INSTR(VIL_W0$,",")+1
10575 IF VIL_W0%>1 THEN VIL_W0$=MID$(VIL_W0$,VIL_W0%)
10580 NEXT
10585 NEXT
10590 FOR VIL_I%=0 TO 99 STEP 9
10595 GOSUB*VIL_LNR
10600 FOR VIL_J%=0 TO 8
10605 VIL_VKEY_PAD%(VIL_I%+VIL_J%)=VAL(VIL_W0$)
10610 VIL_W0%=INSTR(VIL_W0$,",")+1
10615 IF VIL_W0%>1 THEN VIL_W0$=MID$(VIL_W0$,VIL_W0%)
10620 NEXT
10625 NEXT
10630 ENDIF
10635 RETURN
10640 *VIL_VKEY_ENVR
10645 VIL_W0$="":WHILE VIL_W0$<>"#VKEY":GOSUB*VIL_LNR:WEND
10650 RETURN
10655 *VIL_VKEY_ENVW
10660 PRINT#1,"#VKEY"
10665 RETURN
10670 *VIL_VKEY_KY
10675 VIL_K$=INKEY$:VIL_VKEY_KY%=-4
10680 IF VIL_K$<>""THEN
10685 VIL_KY%=ASC(VIL_K$):VIL_VKEY_KY%=VIL_VKEY_KB%(VIL_KY%)
10690 ELSE
10695 VIL_KY%=0:VIL_PAD%=PAD(1)+PTRIG(1)*9
10700 IF VIL_PAD%THEN
10705 IF VIL_VKEY_PRM%=0 THEN VIL_VKEY_PRM%=1:VIL_VKEY_KY%=VIL_VKEY_PAD%(VIL_PAD%)
10710 ELSE
10715 VIL_VKEY_PRM%=0:VIL_VKEY_KY%=-4
10720 ENDIF
10725 ENDIF
10730 RETURN
10735 *VIL_VKEY_SETTC
10740 VIL_VKEY_TCB$="":VIL_I%=1
10745 WHILE VIL_I%>0
10750 VIL_W0%=ASC(MID$(VIL_VKEY_TC$,VIL_I%,1))
10755 VIL_VKEY_TCB$=VIL_VKEY_TCB$+","+MID$(VIL_VKEY_TC$,VIL_I%,1)+STR$(VIL_VKEY_KB%(VIL_W0%))
10760 VIL_VKEY_KB%(VIL_W0%)=VAL(MID$(VIL_VKEY_TC$,VIL_I%+1))
10765 VIL_I%=INSTR(VIL_I%+1,VIL_VKEY_TC$,","):VIL_I%=VIL_I%-(VIL_I%>0)
10770 WEND
10775 RETURN
10780 *VIL_VKEY_RESETTC
10785 VIL_I%=2
10790 WHILE VIL_I%>0
10795 VIL_W0%=ASC(MID$(VIL_VKEY_SCB$,VIL_I%,1))
10800 VIL_VKEY_KB%(VIL_W0%)=VAL(MID$(VIL_VKEY_SCB$,VIL_I%+1))
10805 VIL_I%=INSTR(VIL_I%+1,VIL_VKEY_SCB$,","):VIL_I%=VIL_I%-(VIL_I%>0)
10810 WEND
10815 RETURN
10820 *VIL_MSEL_INITM
10825 IF VIL_E%=0 THEN
10830 VIL_MSEL_MN%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=9:VIL_MSEL_BN%=0
10835 VIL_MSEL_BC%=0:VIL_MSEL_BD%=0:VIL_MSEL_BAM%=0
10840 VIL_MSEL_WT%=50:VIL_MSEL_MRM%=0:VIL_MSEL_MKM%=0
10845 VIL_MSEL_CMN%=0:VIL_MSEL_CMR%=0:VIL_MSEL_CR%=0:VIL_MSEL_CRB%=0
10850 VIL_MSEL_R%=0
10855 DIM VIL_MSEL_X%(VIL_W1%),VIL_MSEL_Y%(VIL_W1%),VIL_MSEL_W%(VIL_W1%),VIL_MSEL_Z%(VIL_W1%)
10860 DIM VIL_MSEL_BN%(VIL_W0%)
10865 DIM VIL_MSEL_CX%(VIL_W2%),VIL_MSEL_CY%(VIL_W2%),VIL_MSEL_CW%(VIL_W2%),VIL_MSEL_CZ%(VIL_W2%)
10870 DIM VIL_MSEL_CN%(VIL_W2%),VIL_MSEL_CL%(VIL_W2%),VIL_MSEL_CBB%(VIL_W2%),VIL_MSEL_CBE%(VIL_W2%),VIL_MSEL_CBN%(VIL_W2%)
10875 VIL_W0$="":WHILE VIL_W0$<>"#MSEL":GOSUB*VIL_LNR:WEND
10880 GOSUB*VIL_LNR:VIL_MSEL_BCM%=VAL(VIL_W0$)
10885 MOUSE 0:MOUSE 1,320,240,0
10890 ENDIF
10895 RETURN
10900 *VIL_MSEL_ENVR
10905 VIL_W0$="":WHILE VIL_W0$<>"#MSEL":GOSUB*VIL_LNR:WEND
10910 GOSUB*VIL_LNR:VIL_MSEL_WT%=VAL(VIL_W0$)
10915 RETURN
10920 *VIL_MSEL_ENVW
10925 PRINT#1,"#MSEL"
10930 PRINT#1,VIL_MSEL_WT%
10935 RETURN
10940 *VIL_MSEL_M
10945 GOSUB*VIL_MSEL_BCMK
10950 GOSUB*VIL_MSEL_IN
10955 RETURN
10960 *VIL_MSEL_BCMK
10965 IF VIL_MSEL_BD%AND 2 THEN VIL_W1%=-1 ELSE VIL_W1%=1
10970 IF VIL_MSEL_BD%AND 4 THEN VIL_W2%=-1 ELSE VIL_W2%=1
10975 FOR VIL_I%=1 TO VIL_YN%
10980 FOR VIL_J%=1 TO VIL_XN%
10985 IF VIL_MSEL_BD%AND 1 THEN
10990 VIL_W0%=(VIL_J%-1)*VIL_YN%+VIL_I%-1+VIL_MSEL_BB%
10995 ELSE
11000 VIL_W0%=(VIL_I%-1)*VIL_XN%+VIL_J%-1+VIL_MSEL_BB%
11005 ENDIF
11010 VIL_MSEL_X%(VIL_W0%)=VIL_X%+(VIL_J%-1)*VIL_XL%*VIL_W1%
11015 VIL_MSEL_Y%(VIL_W0%)=VIL_Y%+(VIL_I%-1)*VIL_YL%*VIL_W2%
11020 VIL_MSEL_W%(VIL_W0%)=VIL_W%+(VIL_J%-1)*VIL_XL%*VIL_W1%
11025 VIL_MSEL_Z%(VIL_W0%)=VIL_Z%+(VIL_I%-1)*VIL_YL%*VIL_W2%
11030 NEXT
11035 NEXT
11040 RETURN
11045 *VIL_MSEL_IN
11050 VIL_W0%=-5:VIL_W1%=-6:VIL_W2%=-7:VIL_W3%=-8
11055 IF VIL_MSEL_BD%AND 2 THEN SWAP VIL_W0%,VIL_W1%
11060 IF VIL_MSEL_BD%AND 4 THEN SWAP VIL_W2%,VIL_W3%
11065 IF VIL_MSEL_BD%AND 1 THEN SWAP VIL_W0%,VIL_W3%:SWAP VIL_W1%,VIL_W2%:SWAP VIL_XN%,VIL_YN%
11070 MOUSE 1,,,1
11075 IF VIL_MSEL_MN%THEN VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
11080 IF VIL_MSEL_BN%<VIL_MSEL_BB%OR VIL_MSEL_BE%<VIL_MSEL_BN%THEN VIL_MSEL_BN%=VIL_MSEL_BB%
11085 IF VIL_MSEL_BC%=0 THEN GOSUB*VIL_MSEL_BC
11090 *VIL_MSEL_IN_W0
11095 GOSUB*VIL_VKEY_KY
11100 IF MOUSE(6,0)THEN VIL_MSEL_MRM%=0
11105 IF MOUSE(2,0)THEN
11110 IF VIL_MSEL_MRM%=1 THEN WAIT VIL_MSEL_WT%
11115 IF VIL_MSEL_MRM%<2 THEN VIL_MSEL_MRM%=VIL_MSEL_MRM%+1
11120 ENDIF
11125 IF MOUSE(3,1)OR VIL_VKEY_KY%=-1 THEN
11130 VIL_W4%=MOUSE(3,0)
11135 VIL_KN%=-1
11140 ELSE IF MOUSE(3,0)OR MOUSE(2,0)THEN
11145 VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
11150 IF VIL_WIN_PM%THEN
11155 VIL_KN%=-2
11160 IF VIL_WIN_X%<=VIL_MX%AND VIL_MX%<=VIL_WIN_W%AND VIL_WIN_Y%<=VIL_MY%AND VIL_MY%<=VIL_WIN_Z%THEN
11165 VIL_MW%=VIL_MX%-VIL_WIN_X%:VIL_MZ%=VIL_MY%-VIL_WIN_Y%
11170 GOSUB*VIL_MSEL_BC:GOSUB*VIL_MSEL_BCCHK:GOSUB*VIL_MSEL_BC
11175 ENDIF
11180 ELSE
11185 VIL_MW%=VIL_MX%:VIL_MZ%=VIL_MY%
11190 GOSUB*VIL_MSEL_BC:GOSUB*VIL_MSEL_BCCHK:GOSUB*VIL_MSEL_BC
11195 VIL_MW%=-1
11200 ENDIF
11205 ELSE
11210 IF VIL_VKEY_KY%=-4 THEN
11215 GOTO*VIL_MSEL_IN_W0
11220 ELSE IF VIL_MSEL_BB%<=VIL_VKEY_KY%AND VIL_VKEY_KY%<=VIL_MSEL_BE%THEN
11225 VIL_KN%=VIL_VKEY_KY%
11230 GOSUB*VIL_MSEL_BC:VIL_MSEL_BN%=VIL_KN%:GOSUB*VIL_MSEL_BC
11235 ELSE IF VIL_VKEY_KY%=-2 THEN
11240 VIL_KN%=VIL_MSEL_BN%
11245 ELSE IF VIL_VKEY_KY%=-3 OR VIL_VKEY_KY%=-13 THEN
11250 VIL_KN%=VIL_VKEY_KY%
11255 ELSE
11260 IF VIL_MSEL_MKM%=1 THEN
11265 IF VIL_VKEY_KY%=-7 OR VIL_VKEY_KY%=-8 THEN VIL_KN%=VIL_VKEY_KY%:GOTO*VIL_MSEL_IN_W1
11270 ELSE IF VIL_MSEL_MKM%=2 THEN
11275 IF VIL_VKEY_KY%=-5 OR VIL_VKEY_KY%=-6 THEN VIL_KN%=VIL_VKEY_KY%:GOTO*VIL_MSEL_IN_W1
11280 ENDIF
11285 GOSUB*VIL_MSEL_BC
11290 VIL_MSEL_BN%=VIL_MSEL_BN%-(VIL_VKEY_KY%=VIL_W0%)+(VIL_VKEY_KY%=VIL_W1%)+((VIL_VKEY_KY%=VIL_W2%)-(VIL_VKEY_KY%=VIL_W3%))*VIL_XN%
11295 VIL_MSEL_BN%=VIL_MSEL_BN%+(VIL_VKEY_KY%=VIL_W0%AND(VIL_MSEL_BN%MOD VIL_XN%)=1)*VIL_XN%
11300 VIL_MSEL_BN%=VIL_MSEL_BN%-(VIL_VKEY_KY%=VIL_W1%AND((VIL_MSEL_BN%+1)MOD VIL_XN%)=1)*VIL_XN%
11305 VIL_MSEL_BN%=VIL_MSEL_BN%-((VIL_MSEL_BN%<VIL_MSEL_BB%)-(VIL_MSEL_BN%>VIL_MSEL_BE%))*(VIL_MSEL_BE%-VIL_MSEL_BB%+1)
11310 GOSUB*VIL_MSEL_BC
11315 GOTO*VIL_MSEL_IN_W0
11320 ENDIF
11325 ENDIF
11330 *VIL_MSEL_IN_W1
11335 VIL_MSEL_BN%(VIL_MSEL_MN%)=VIL_MSEL_BN%:MOUSE 1,,,0:VIL_MSEL_BC%=-1
11340 RETURN
11345 *VIL_MSEL_BCCHK
11350 VIL_KN%=-2
11355 IF MSEL_BAM%=0 THEN
11360 IF(VIL_MSEL_BD%AND 1)=1 THEN
11365 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BE%STEP VIL_YN%
11370 IF VIL_MSEL_X%(VIL_I%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_I%)THEN
11375 FOR VIL_J%=VIL_I%TO VIL_I%+VIL_YN%-1
11380 IF VIL_MSEL_Y%(VIL_J%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_J%)THEN
11385 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
11390 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
11395 ENDIF
11400 NEXT
11405 ENDIF
11410 NEXT
11415 ELSE
11420 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BB%+VIL_XN%-1
11425 IF VIL_MSEL_X%(VIL_I%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_I%)THEN
11430 FOR VIL_J%=VIL_I%TO VIL_MSEL_BE%STEP VIL_XN%
11435 IF VIL_MSEL_Y%(VIL_J%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_J%)THEN
11440 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
11445 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
11450 ENDIF
11455 NEXT
11460 ENDIF
11465 NEXT
11470 ENDIF
11475 ELSE
11480 IF(VIL_MSEL_BD%AND 1)=1 THEN
11485 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BB%+VIL_YN%-1
11490 IF VIL_MSEL_Y%(VIL_I%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_I%)THEN
11495 FOR VIL_J%=VIL_I%TO VIL_MSEL_BE%STEP VIL_YN%
11500 IF VIL_MSEL_X%(VIL_J%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_J%)THEN
11505 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
11510 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
11515 ENDIF
11520 NEXT
11525 ENDIF
11530 NEXT
11535 ELSE
11540 FOR VIL_I%=VIL_MSEL_BB%TO VIL_MSEL_BE%STEP VIL_XN%
11545 IF VIL_MSEL_Y%(VIL_I%)=<VIL_MZ%AND VIL_MZ%=<VIL_MSEL_Z%(VIL_I%)THEN
11550 FOR VIL_J%=VIL_I%TO VIL_I%+VIL_XN%-1
11555 IF VIL_MSEL_X%(VIL_J%)=<VIL_MW%AND VIL_MW%=<VIL_MSEL_W%(VIL_J%)THEN
11560 VIL_KN%=VIL_J%:VIL_MSEL_BN%=VIL_KN%
11565 VIL_I%=VIL_MSEL_BE%:VIL_J%=VIL_I%
11570 ENDIF
11575 NEXT
11580 ENDIF
11585 NEXT
11590 ENDIF
11595 ENDIF
11600 RETURN
11605 *VIL_MSEL_CNFM
11610 VIL_MSEL_BD%=0:VIL_MSEL_MKM%=1
11615 IF VIL_MSEL_BC%=0 THEN
11620 FOR VIL_MSEL_CR%=1 TO VIL_MSEL_CMR%
11625 GOSUB*VIL_MSEL_CNFM_W0
11630 GOSUB*VIL_MSEL_BCMK
11635 VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
11640 GOSUB*VIL_MSEL_LC
11645 NEXT
11650 ENDIF
11655 VIL_MSEL_CR%=VIL_MSEL_BN%(VIL_MSEL_CMN%)
11660 IF VIL_MSEL_CR%<1 OR VIL_MSEL_CMR%<VIL_MSEL_CR%THEN VIL_MSEL_CR%=1
11665 VIL_KN%=-6
11670 WHILE-9<VIL_KN%AND VIL_KN%<-4
11675 GOSUB*VIL_MSEL_CNFM_W0
11680 GOSUB*VIL_MSEL_BCMK:VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
11685 GOSUB*VIL_MSEL_LC
11690 VIL_MSEL_BC%=0
11695 GOSUB*VIL_MSEL_IN
11700 GOSUB*VIL_MSEL_BC:GOSUB*VIL_MSEL_LC
11705 IF VIL_KN%=-2 THEN
11710 VIL_MSEL_BN%(VIL_MSEL_MN%)=VIL_MSEL_BN%
11715 IF VIL_WIN_PM%=0 THEN VIL_MW%=VIL_MX%:VIL_MZ%=VIL_MY%
11720 VIL_MSEL_CRB%=VIL_MSEL_CR%
11725 FOR VIL_I%=1 TO VIL_MSEL_CMR%
11730 IF VIL_MSEL_CY%(VIL_I%)<=VIL_MZ%AND VIL_MZ%<=VIL_MSEL_CZ%(VIL_I%)THEN
11735 VIL_MSEL_CR%=VIL_I%
11740 GOSUB*VIL_MSEL_CNFM_W0
11745 GOSUB*VIL_MSEL_BCMK:GOSUB*VIL_MSEL_BCCHK
11750 IF VIL_KN%>-1 THEN
11755 GOSUB*VIL_MSEL_LC
11760 VIL_MSEL_BN%=VIL_MSEL_BN%(VIL_MSEL_MN%)
11765 VIL_MSEL_BN%(VIL_MSEL_MN%)=VIL_KN%
11770 GOSUB*VIL_MSEL_LC
11775 ELSE
11780 VIL_MSEL_CR%=VIL_MSEL_CRB%
11785 VIL_KN%=-2
11790 ENDIF
11795 VIL_I%=VIL_MSEL_CMR%
11800 ENDIF
11805 NEXT
11810 IF VIL_WIN_PM%=0 THEN VIL_MW%=-1
11815 ELSE
11820 VIL_MSEL_CR%=VIL_MSEL_CR%+(VIL_KN%=-7)-(VIL_KN%=-8)
11825 VIL_MSEL_CR%=VIL_MSEL_CR%+((VIL_MSEL_CR%>VIL_MSEL_CMR%)-(VIL_MSEL_CR%<1))*VIL_MSEL_CMR%
11830 ENDIF
11835 WEND
11840 VIL_MSEL_BN%(VIL_MSEL_CMN%)=VIL_MSEL_CR%
11845 VIL_MSEL_MKM%=0
11850 RETURN
11855 *VIL_MSEL_CNFM_W0
11860 VIL_X%=VIL_MSEL_CX%(VIL_MSEL_CR%):VIL_Y%=VIL_MSEL_CY%(VIL_MSEL_CR%):VIL_W%=VIL_MSEL_CW%(VIL_MSEL_CR%):VIL_Z%=VIL_MSEL_CZ%(VIL_MSEL_CR%)
11865 VIL_XL%=VIL_MSEL_CL%(VIL_MSEL_CR%):VIL_XN%=VIL_MSEL_CN%(VIL_MSEL_CR%):VIL_YN%=1
11870 VIL_MSEL_BB%=VIL_MSEL_CBB%(VIL_MSEL_CR%):VIL_MSEL_BE%=VIL_MSEL_CBE%(VIL_MSEL_CR%)
11875 VIL_MSEL_MN%=VIL_MSEL_CMN%+VIL_MSEL_CR%
11880 RETURN
11885 *VIL_MSEL_CNFSV
11890 FOR VIL_I%=0 TO VIL_MSEL_CMR%:VIL_MSEL_CBN%(VIL_I%)=VIL_MSEL_BN%(VIL_MSEL_CMN%+VIL_I%):NEXT
11895 RETURN
11900 *VIL_MSEL_CNFLD
11905 FOR VIL_I%=0 TO VIL_MSEL_CMR%:VIL_MSEL_BN%(VIL_MSEL_CMN%+VIL_I%)=VIL_MSEL_CBN%(VIL_I%):NEXT
11910 RETURN
11915 *VIL_MSEL_BC
11920 IF VIL_MSEL_BCM%THEN
11925 LINE(VIL_MSEL_X%(VIL_MSEL_BN%),VIL_MSEL_Y%(VIL_MSEL_BN%))-(VIL_MSEL_W%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%)),XOR,%VIL_C%,BF
11930 ELSE
11935 LINE(VIL_MSEL_X%(VIL_MSEL_BN%),VIL_MSEL_Y%(VIL_MSEL_BN%))-(VIL_MSEL_W%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%)),XOR,%VIL_C%,B
11940 ENDIF
11945 RETURN
11950 *VIL_MSEL_LC
11955 LINE(VIL_MSEL_X%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%))-(VIL_MSEL_W%(VIL_MSEL_BN%),VIL_MSEL_Z%(VIL_MSEL_BN%)),XOR,%VIL_C%
11960 RETURN
11965 *VIL_INP_INITM
11970 IF VIL_E%=0 THEN
11975 VIL_INP_L%=0:VIL_INP_CX%=0:VIL_INP_CKX%=0
11980 VIL_INP_HSP%=0:VIL_INP_HSN%=0:VIL_INP_HSMAX%=VIL_W0%
11985 VIL_INP_HSO$=""
11990 VIL_INP_HSB%=0:VIL_INP_HSE%=0
11995 VIL_INP_CF%=0
12000 DIM VIL_INP_HSB%(VIL_W0%),VIL_INP_HSE%(VIL_W0%)
12005 DIM VIL_INP_HSPP%(0),VIL_INP_HSNP%(0),VIL_INP_HS$(0)
12010 MOUSE 0:MOUSE 1,320,240,0
12015 ENDIF
12020 RETURN
12025 *VIL_INP_ENVR
12030 VIL_W0$="":WHILE VIL_W0$<>"#INP":GOSUB*VIL_LNR:WEND
12035 VIL_I%=1:VIL_INP_HSE%(0)=0
12040 WHILE VIL_I%<=VIL_INP_HSMAX%
12045 GOSUB*VIL_LNR:
12050 VIL_INP_HSB%(VIL_I%)=VIL_INP_HSE%(VIL_I%-1)+1
12055 VIL_INP_HSE%(VIL_I%)=VIL_INP_HSB%(VIL_I%)+VAL(VIL_W0$)-1
12060 VIL_I%=VIL_I%+1
12065 WEND
12070 VIL_W0%=VIL_INP_HSE%(VIL_INP_HSMAX%)
12075 ERASE VIL_INP_HSPP%,VIL_INP_HSNP%,VIL_INP_HS$
12080 DIM VIL_INP_HSPP%(VIL_W0%),VIL_INP_HSNP%(VIL_W0%),VIL_INP_HS$(VIL_W0%)
12085 VIL_I%=1
12090 WHILE VIL_I%<=VIL_INP_HSMAX%
12095 FOR VIL_J%=VIL_INP_HSB%(VIL_I%)TO VIL_INP_HSE%(VIL_I%)
12100 VIL_INP_HSPP%(VIL_J%)=VIL_J%-1:VIL_INP_HSNP%(VIL_J%)=VIL_J%+1:
12105 GOSUB*VIL_LNR:VIL_INP_HS$(VIL_J%)=MID$(VIL_W0$,2)
12110 NEXT
12115 VIL_INP_HSPP%(VIL_INP_HSB%(VIL_I%))=0:VIL_INP_HSNP%(VIL_INP_HSE%(VIL_I%))=0
12120 VIL_I%=VIL_I%+1
12125 WEND
12130 RETURN
12135 *VIL_INP_ENVW
12140 PRINT#1,"#INP"
12145 VIL_I%=1
12150 WHILE VIL_I%<=VIL_INP_HSMAX%
12155 VIL_W1%=0:VIL_W0%=VIL_INP_HSB%(VIL_I%)
12160 WHILE VIL_W0%
12165 VIL_W1%=VIL_W1%+1:VIL_W0%=VIL_INP_HSNP%(VIL_W0%)
12170 WEND
12175 PRINT#1,VIL_W1%
12180 VIL_I%=VIL_I%+1
12185 WEND
12190 VIL_I%=1
12195 WHILE VIL_I%<=VIL_INP_HSMAX%
12200 VIL_W0%=VIL_INP_HSB%(VIL_I%)
12205 WHILE VIL_W0%
12210 PRINT#1,"\"+VIL_INP_HS$(VIL_W0%)
12215 VIL_W0%=VIL_INP_HSNP%(VIL_W0%)
12220 WEND
12225 VIL_I%=VIL_I%+1
12230 WEND
12235 RETURN
12240 *VIL_INP_STR
12245 VIL_INP_L%=LEN(VIL_A$)
12250 VIL_INP_CX%=VIL_INP_L%:VIL_INP_CKX%=KLEN(VIL_A$,0)
12255 IF VIL_INP_HSN%THEN VIL_INP_HSP%=0:VIL_INP_CF%=0:VIL_INP_HSS$="":VIL_INP_HSB%=VIL_INP_HSB%(VIL_INP_HSN%):VIL_INP_HSE%=VIL_INP_HSE%(VIL_INP_HSN%)
12260 MOUSE 1,,,1
12265 VIL_KN%=1:GOSUB*VIL_INP_GPRINT:GOSUB*VIL_INP_STR_W0
12270 WHILE VIL_KN%>0
12275 GOSUB*VIL_VKEY_KY
12280 IF 128<=VIL_KY%AND VIL_KY%<=159 THEN VIL_W0$=VIL_K$:GOSUB*VIL_VKEY_KY:VIL_K$=VIL_W0$+VIL_K$
12285 IF MOUSE(3,1)OR VIL_VKEY_KY%=-1 THEN
12290 VIL_KN%=-1
12295 ELSE IF MOUSE(3,0)OR MOUSE(2,0)THEN
12300 VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
12305 IF VIL_WIN_PM%THEN
12310 IF VIL_WIN_PM%AND VIL_WIN_X%<=VIL_MX%AND VIL_MX%<=VIL_WIN_W%AND VIL_WIN_Y%<=VIL_MY%AND VIL_MY%<=VIL_WIN_Z%THEN
12315 VIL_MW%=VIL_MX%-VIL_WIN_X%:VIL_MZ%=VIL_MY%-VIL_WIN_Y%
12320 ELSE
12325 VIL_MW%=-1
12330 ENDIF
12335 ENDIF
12340 VIL_KN%=-2
12345 ELSE IF VIL_VKEY_KY%=-4 THEN
12350 VIL_KN%=1
12355 ELSE IF VIL_VKEY_KY%=-2 THEN
12360 IF VIL_INP_HSN%AND VIL_A$<>""THEN
12365 GOSUB*VIL_INP_HSSA
12370 IF VIL_INP_HSP%=0 OR VIL_INP_HSP%=VIL_INP_HSB%THEN
12375 VIL_INP_HSO$=VIL_INP_HS$(VIL_INP_HSB%)
12380 VIL_INP_HS$(VIL_INP_HSB%)=VIL_A$
12385 VIL_INP_HSNP%(VIL_INP_HSE%)=VIL_INP_HSB%
12390 VIL_INP_HSPP%(VIL_INP_HSB%)=VIL_INP_HSE%
12395 VIL_INP_HSB%=VIL_INP_HSNP%(VIL_INP_HSB%)
12400 VIL_INP_HSE%=VIL_INP_HSNP%(VIL_INP_HSE%)
12405 VIL_INP_HSPP%(VIL_INP_HSB%)=0
12410 VIL_INP_HSNP%(VIL_INP_HSE%)=0
12415 ELSE IF VIL_INP_HSP%<>VIL_INP_HSE%THEN
12420 VIL_INP_HSPP%(VIL_INP_HSNP%(VIL_INP_HSP%))=VIL_INP_HSPP%(VIL_INP_HSP%)
12425 VIL_INP_HSNP%(VIL_INP_HSPP%(VIL_INP_HSP%))=VIL_INP_HSNP%(VIL_INP_HSP%)
12430 VIL_INP_HSNP%(VIL_INP_HSE%)=VIL_INP_HSP%
12435 VIL_INP_HSPP%(VIL_INP_HSP%)=VIL_INP_HSE%
12440 VIL_INP_HSNP%(VIL_INP_HSP%)=0
12445 VIL_INP_HSE%=VIL_INP_HSP%
12450 ENDIF
12455 ENDIF
12460 VIL_KN%=0
12465 ELSE IF VIL_VKEY_KY%=-13 THEN
12470 VIL_KN%=-13
12475 ELSE
12480 GOSUB*VIL_INP_STR_W0
12485 IF VIL_KY%>=32 AND VIL_KY%<>127 THEN
12490 VIL_W0%=KTYPE(VIL_K$,1)+1
12495 IF VIL_INP_L%+VIL_W0%<=VIL_L%THEN
12500 VIL_A$=LEFT$(VIL_A$,VIL_INP_CX%)+VIL_K$+MID$(VIL_A$,VIL_INP_CX%+1)
12505 VIL_INP_L%=VIL_INP_L%+VIL_W0%
12510 IF VIL_INP_L%<VIL_L%THEN
12515 VIL_INP_CKX%=VIL_INP_CKX%+1:VIL_INP_CX%=VIL_INP_CX%+VIL_W0%
12520 ENDIF
12525 GOSUB*VIL_INP_GPRINT
12530 VIL_INP_CF%=-1
12535 ENDIF
12540 ELSE IF VIL_VKEY_KY%=-7 OR VIL_VKEY_KY%=-8 THEN
12545 IF VIL_INP_HSN%THEN
12550 GOSUB*VIL_INP_HSSP
12555 VIL_INP_L%=LEN(VIL_A$):VIL_INP_CX%=VIL_INP_L%:VIL_INP_CKX%=KLEN(VIL_A$,0):VIL_INP_CF%=0
12560 GOSUB*VIL_INP_GPRINT
12565 ENDIF
12570 ELSE IF VIL_VKEY_KY%=-5 THEN
12575 IF VIL_INP_CX%<VIL_INP_L%THEN
12580 VIL_INP_CKX%=VIL_INP_CKX%+1:VIL_W0%=VIL_INP_CX%
12585 IF VIL_INP_CKX%<KLEN(VIL_A$)+1 THEN VIL_INP_CX%=VIL_INP_CX%+1+KTYPE(VIL_A$,VIL_INP_CKX%)ELSE VIL_INP_CX%=VIL_INP_CX%+1
12590 IF VIL_INP_CX%=VIL_L%THEN VIL_INP_CX%=VIL_W0%:VIL_INP_CKX%=VIL_INP_CKX%-1
12595 ENDIF
12600 ELSE IF VIL_VKEY_KY%=-6 THEN
12605 IF VIL_INP_CX%>0 THEN
12610 VIL_INP_CKX%=VIL_INP_CKX%-1
12615 VIL_INP_CX%=VIL_INP_CX%-1-KTYPE(VIL_A$,VIL_INP_CKX%+1)
12620 ENDIF
12625 ELSE IF VIL_VKEY_KY%=-15 AND VIL_INP_CX%>0 THEN
12630 VIL_INP_CKX%=VIL_INP_CKX%-1
12635 VIL_W0%=KTYPE(VIL_A$,VIL_INP_CKX%+1)+1
12640 VIL_INP_L%=VIL_INP_L%-VIL_W0%:VIL_INP_CX%=VIL_INP_CX%-VIL_W0%
12645 VIL_A$=KLEFT$(VIL_A$,VIL_INP_CKX%)+KMID$(VIL_A$,VIL_INP_CKX%+2)
12650 GOSUB*VIL_INP_GPRINT
12655 VIL_INP_CF%=-1
12660 ELSE IF VIL_VKEY_KY%=-16 AND VIL_INP_CX%<VIL_INP_L%THEN
12665 VIL_INP_L%=VIL_INP_L%-KTYPE(VIL_A$,VIL_INP_CKX%+1)-1
12670 VIL_A$=KLEFT$(VIL_A$,VIL_INP_CKX%)+KMID$(VIL_A$,VIL_INP_CKX%+2)
12675 GOSUB*VIL_INP_GPRINT
12680 VIL_INP_CF%=-1
12685 ELSE IF VIL_VKEY_KY%=-17 THEN
12690 VIL_A$="":VIL_INP_L%=0:VIL_INP_CX%=0:VIL_INP_CKX%=0
12695 GOSUB*VIL_INP_GPRINT
12700 VIL_INP_CF%=-1
12705 ENDIF
12710 GOSUB*VIL_INP_STR_W0:VIL_KN%=1
12715 ENDIF
12720 WEND
12725 MOUSE 1,,,0
12730 IF VIL_INP_HSN%THEN VIL_INP_HSB%(VIL_INP_HSN%)=VIL_INP_HSB%:VIL_INP_HSE%(VIL_INP_HSN%)=VIL_INP_HSE%
12735 GOSUB*VIL_INP_STR_W0
12740 RETURN
12745 *VIL_INP_STR_W0
12750 VIL_W0%=7
12755 IF VIL_INP_CX%<VIL_INP_L%THEN IF KTYPE(VIL_A$,VIL_INP_CKX%+1)THEN VIL_W0%=15
12760 LINE(VIL_X%+VIL_INP_CX%*8,VIL_Y%+17)-(VIL_X%+VIL_INP_CX%*8+VIL_W0%,VIL_Y%+17),XOR,%VIL_C%
12765 RETURN
12770 *VIL_INP_HSSA
12775 VIL_INP_HSP%=VIL_INP_HSE%(VIL_INP_HSN%)
12780 WHILE VIL_INP_HSP%AND VIL_INP_HS$(VIL_INP_HSP%)<>VIL_A$
12785 VIL_INP_HSP%=VIL_INP_HSPP%(VIL_INP_HSP%)
12790 WEND
12795 RETURN
12800 *VIL_INP_HSSP
12805 IF VIL_INP_CF%THEN VIL_INP_HSS$=VIL_A$:VIL_INP_HSP%=0
12810 IF VIL_INP_HSP%=0 THEN
12815 IF VIL_VKEY_KY%=-7 THEN VIL_INP_HSP%=VIL_INP_HSE%ELSE VIL_INP_HSP%=VIL_INP_HSB%
12820 ELSE
12825 IF VIL_VKEY_KY%=-7 THEN VIL_INP_HSP%=VIL_INP_HSPP%(VIL_INP_HSP%)ELSE VIL_INP_HSP%=VIL_INP_HSNP%(VIL_INP_HSP%)
12830 ENDIF
12835 VIL_W0%=LEN(VIL_INP_HSS$)
12840 WHILE VIL_INP_HSP%AND(LEFT$(VIL_INP_HS$(VIL_INP_HSP%),VIL_W0%)<>VIL_INP_HSS$OR VIL_INP_HS$(VIL_INP_HSP%)="")
12845 IF VIL_VKEY_KY%=-7 THEN VIL_INP_HSP%=VIL_INP_HSPP%(VIL_INP_HSP%)ELSE VIL_INP_HSP%=VIL_INP_HSNP%(VIL_INP_HSP%)
12850 WEND
12855 IF VIL_INP_HSP%THEN VIL_A$=VIL_INP_HS$(VIL_INP_HSP%)ELSE VIL_A$=VIL_INP_HSS$
12860 RETURN
12865 *VIL_INP_GPRINT
12870 LINE(VIL_X%,VIL_Y%)-(VIL_X%+VIL_L%*8-1,VIL_Y%+15),PSET,%VIL_CB%,BF
12875 SYMBOL(VIL_X%,VIL_Y%),VIL_A$,1,1,%VIL_C%
12880 RETURN
12885 *VIL_INP_FEPON
12890 CONSOLE 0,24,2
12895 VIL_W0%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
12900 VIL_E%=0
12905 GET@A(0,464)-(639,479),VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)
12910 IF VIL_E%=0 THEN LINE(0,464)-(639,479),PSET,0,BF
12915 IF VIL_W0%THEN GOSUB*VIL_WIN_PMR
12920 RETURN
12925 *VIL_INP_FEPOFF
12930 CONSOLE 0,25,0
12935 VIL_W0%=VIL_WIN_PM%:GOSUB*VIL_WIN_PMA
12940 PUT@A(0,464)-(639,479),VIL_WIN_BF%,PSET,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
12945 IF VIL_W0%THEN GOSUB*VIL_WIN_PMR
12950 RETURN
12955 *VIL_INP_MVWAIT
12960 VIL_W0%=MOUSE(9)+MOUSE(10):VIL_W0$=INKEY$
12965 WHILE ABS(MOUSE(9))<10 AND ABS(MOUSE(10))<10 AND MOUSE(3,0)+MOUSE(3,1)=0 AND INKEY$=""AND PAD(1)+PTRIG(1)=0:WEND
12970 RETURN
12975 *VIL_MG_INITM
12980 IF VIL_E%=0 THEN
12985 VIL_MG_X%=0:VIL_MG_Y%=0:VIL_MG_GN%=0:VIL_MG_PN%=0
12990 DIM VIL_MG_MGD%(VIL_W0&),VIL_MG_MGI&(VIL_W1%),VIL_MG_MPD%(VIL_W2&),VIL_MG_MPI&(VIL_W3%)
12995 VIL_W0$="":WHILE VIL_W0$<>"#MG":GOSUB*VIL_LNR:WEND
13000 ENDIF
13005 RETURN
13010 *VIL_MG_ENVR
13015 VIL_W0$="":WHILE VIL_W0$<>"#MG":GOSUB*VIL_LNR:WEND
13020 RETURN
13025 *VIL_MG_ENVW
13030 PRINT#1,"#MG"
13035 RETURN
13040 *VIL_MG_LD
13045 LOAD@VIL_MG_F$+".MGD",VIL_MG_MGD%
13050 LOAD@VIL_MG_F$+".MGI",VIL_MG_MGI&
13055 LOAD@VIL_MG_F$+".MPD",VIL_MG_MPD%
13060 LOAD@VIL_MG_F$+".MPI",VIL_MG_MPI&
13065 RETURN
13070 *VIL_MG_SETP
13075 FOR VIL_I%=0 TO 15
13080 PALETTE VIL_I%,[(VIL_MG_MPD%(VIL_MG_MPI&(VIL_MG_PN%)+VIL_I%)AND&HF0),(VIL_MG_MPD%(VIL_MG_MPI&(VIL_MG_PN%)+VIL_I%)AND&HF00)/&H10,(VIL_MG_MPD%(VIL_MG_MPI&(VIL_MG_PN%)+VIL_I%)AND&HF)*&H10]
13085 NEXT
13090 RETURN
13095 *VIL_MG_PUTG
13100 PUT@A(VIL_MG_X%,VIL_MG_Y%)-(VIL_MG_X%+VIL_MG_MGD%(VIL_MG_MGI&(VIL_MG_GN%)+2),VIL_MG_Y%+VIL_MG_MGD%(VIL_MG_MGI&(VIL_MG_GN%)+3)),VIL_MG_MGD%,,,,,VIL_MG_MGI&(VIL_MG_GN%)+4
13105 RETURN